import request from '../common/request'
import config from '../common/config'

// 客户端授权id - 与.env中的VITE_CLIENT_ID保持一致
const clientId = 'e5cd7e4891bf95d1d19206ce24a7b32e';

/**
 * 是否登录状态
 */
export function isLogin() {
  return request({
    url: '/auth/isLogin',
    method: 'get'
  });
}

/**
 * 用户登录 - 符合RuoYi OAuth2认证流程
 * @param {Object} data - 登录数据
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 * @param {string} [data.code] - 验证码
 * @param {string} [data.uuid] - 验证码唯一标识
 * @returns {Promise}
 */
export function login(data) {
  const loginData = {
    ...data,
    clientId: data.clientId || clientId,
    grantType: data.grantType || 'password'
  };
  return request({
    url: '/auth/login',
    method: 'post',
    data: loginData,
    withToken: false,
    withEncrypt: true
  });
}

/**
 * 用户注册 - 符合RuoYi注册规范
 * @param {Object} registerData - 注册数据
 * @returns {Promise}
 */
export function register(registerData) {
  const data = {
    ...registerData,
    clientId,
    grantType: 'password'
  };
  return request({
    url: '/auth/register',
    method: 'post',
    data,
    withToken: false,
    withEncrypt: true
  });
}

/**
 * 获取用户详细信息 - 包含权限和角色
 * @returns {Promise}
 */
export function getUserInfo() {
  return request({
    url: '/system/user/getInfo',
    method: 'get'
  });
}

/**
 * 退出登录 - 清理服务端会话
 * @returns {Promise}
 */
export function logout() {
  return request({
    url: '/auth/logout',
    method: 'post'
  });
}

/**
 * 获取验证码图片
 * @returns {Promise}
 */
export function getCodeImg() {
  console.log('发起验证码请求，明确设置不携带token');
  return request({
    url: '/auth/code',
    method: 'get',
    timeout: 20000,
    withToken: false,
    // 确保完全不带任何认证信息
    header: {
      'Content-Type': 'application/json',
      // 显式移除任何可能存在的认证头
      'Authorization': ''
    }
  });
}

/**
 * 更新用户基本信息
 * @param {Object} profileData - 用户基本信息
 * @returns {Promise}
 */
export function updateUserProfile(profileData) {
  return request({
    url: '/system/user/profile/basic',
    method: 'put',
    data: profileData
  });
}

/**
 * 上传用户头像
 * @param {string} filePath - 图片文件路径
 * @returns {Promise}
 */
export function uploadAvatar(filePath) {
  return new Promise((resolve, reject) => {
    const token = uni.getStorageSync('Token') || '';
    
    uni.uploadFile({
      url: config.baseUrl + '/system/user/profile/avatar',
      filePath: filePath,
      name: 'avatarfile',
      header: {
        'Authorization': token
      },
      success: (uploadResult) => {
        try {
          console.log('头像上传原始响应:', uploadResult);
          const res = JSON.parse(uploadResult.data);
          console.log('头像上传解析后响应:', res);
          
          if (res.code === 200 && res.data) {
            resolve(res);
          } else {
            reject(new Error(res.msg || '上传失败'));
          }
        } catch (e) {
          console.error('解析响应失败:', e);
          reject(new Error('上传失败，请重试'));
        }
      },
      fail: (err) => {
        console.error('头像上传失败:', err);
        reject(err);
      }
    });
  });
}

/**
 * 更新用户邮箱
 * @param {Object} emailData - 邮箱数据
 * @returns {Promise}
 */
export function updateUserEmail(emailData) {
  return request({
    url: '/system/user/profile/email',
    method: 'put',
    data: emailData
  });
}

/**
 * 更新用户手机号
 * @param {Object} phoneData - 手机号数据
 * @returns {Promise}
 */
export function updateUserPhone(phoneData) {
  return request({
    url: '/system/user/profile/phonenumber',
    method: 'put',
    data: phoneData
  });
}

/**
 * 刷新Token
 * @param {string} refreshToken - 刷新令牌
 * @returns {Promise}
 */
export function refreshToken(refreshToken) {
  return request({
    url: '/auth/refresh',
    method: 'post',
    data: {
      refreshToken,
      clientId
    },
    withToken: false
  });
}

/**
 * 第三方登录回调
 * @param {Object} data - 第三方登录数据
 * @returns {Promise}
 */
export function socialCallback(data) {
  const loginData = {
    ...data,
    clientId,
    grantType: 'social'
  };
  return request({
    url: '/auth/social/callback',
    method: 'post',
    data: loginData
  });
}